www.gusucode.com > VC++网络版的打字软件源程序-源码程序 > VC++网络版的打字软件源程序-源码程序\code\TypeClt V2.0\InputLanguage.cpp

    // InputLanguage.cpp: implementation of the CInputLanguage class.
// Download by http://www.NewXing.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Type.h"
#include "InputLanguage.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CInputLanguage::CInputLanguage()
{
	m_pILHead=NULL;
	LoadInputLanguage();

}

CInputLanguage::~CInputLanguage()
{
	
}

BOOL CInputLanguage::LoadInputLanguage()
{
	HKEY hKey,hKey1;
	DWORD cp=16;
	char lp[15];
	CString szID;
	CString szKeyName,szKeyName1;
	szKeyName="keyboard layout\\preload";
	szKeyName1="system\\currentcontrolset\\control\\keyboard layouts\\";
	
	int i=1;
	szID.Format("%d",i);
	DWORD lpT=REG_SZ;
	if(::RegOpenKey(HKEY_CURRENT_USER,szKeyName,&hKey)==ERROR_SUCCESS)
	{
		while(::RegQueryValueEx(hKey,szID,NULL,&lpT,(LPBYTE)lp,&cp)==ERROR_SUCCESS)
		{
			CString szTempName;
			szTempName=szKeyName1+(LPCTSTR)(LPCTSTR)lp;
			if(::RegOpenKey(HKEY_LOCAL_MACHINE,szTempName,&hKey1)==ERROR_SUCCESS)
			{
				char lpD[100];
				DWORD lps=100;
				if(::RegQueryValueEx(hKey1,"Layout text",NULL,&lpT,(LPBYTE)lpD,&lps)==ERROR_SUCCESS)
				{
					IL* p1;
					IL* p2;

					p1=m_pILHead;
					p2=new(IL);

					strcpy(p2->ilID,lp);
					strcpy(p2->szName,lpD);
					p2->pNext=NULL;
					
					if(p1)
					{
						while(p1->pNext)
						{
							p1=p1->pNext;
						}
						p1->pNext=p2;
					}
					else
					{
						m_pILHead=p2;
					}
				}
			}
			::RegCloseKey(hKey1);
			i++;
			szID.Format("%d",i);
		}
	}

	::RegCloseKey(hKey);
	return (m_pILHead!=NULL);

}

void CInputLanguage::Clear()
{
	IL* p1;
	IL* p2;
	
	p1=m_pILHead;
	while(p1)
	{
		p2=p1;
		p1=p1->pNext;
		delete(p2);
	}

	m_pILHead=NULL;

}

BOOL CInputLanguage::SelectInputLanguage(IL *pIL)
{
	if(!pIL)
	{
		return FALSE;
	}

	HKL hk1;
	hk1=::LoadKeyboardLayout(pIL->ilID,KLF_ACTIVATE);
	if(hk1==NULL)
	{
		return FALSE;
	}
	else
	{
		::ActivateKeyboardLayout(hk1,KLF_SETFORPROCESS);
	}

	return TRUE;
}

IL* CInputLanguage::GetInputLanguageList()
{
	return m_pILHead;
}